import { createComponentWithStore } from '../../../../store/helpers/component_creator.js';
import { resourceStore } from '../../../../store/modules/resource/index.js';
import dayjs from 'dayjs';

// 状态名称映射
const STATUS_NAMES = {
  1: '草稿',
  2: '已发布',
  3: '生产版本',
  4: '客户确认版本',
  5: '已废弃'
};

createComponentWithStore({
  /**
   * 组件的属性列表
   */
  properties: {
    // 比较数据
    comparison: {
      type: Object,
      value: null,
      observer: function(newVal) {
        if (newVal) {
          this._processComparisonData(newVal);
        }
      }
    },
    // 资源类型
    resourceType: {
      type: Number,
      value: 0,
      observer: function(newVal) {
        this._determineContentType(newVal);
      }
    },
    // 旧版本号
    oldVersion: {
      type: String,
      value: ''
    },
    // 新版本号
    newVersion: {
      type: String,
      value: ''
    }
  },

  /**
   * 组件的初始数据
   */
  data: {
    oldCreateTime: '',
    newCreateTime: '',
    oldStatusName: '',
    newStatusName: '',
    oldSize: '',
    newSize: '',
    contentType: 'none', // 'none', 'bom', 'text', 'generic'
    bomDiffs: [],
    textDiffs: []
  },
  
  // 使用Store
  useStore: {
    resourceStore
  },

  /**
   * 组件的方法列表
   */
  methods: {
    /**
     * 处理比较数据
     */
    _processComparisonData(comparison) {
      if (!comparison || !comparison.oldVersion || !comparison.newVersion) {
        return;
      }
      
      // 格式化时间
      const oldCreateTime = comparison.oldVersion.CREATE_TIME 
        ? dayjs.unix(comparison.oldVersion.CREATE_TIME).format('YYYY-MM-DD HH:mm')
        : '';
      
      const newCreateTime = comparison.newVersion.CREATE_TIME
        ? dayjs.unix(comparison.newVersion.CREATE_TIME).format('YYYY-MM-DD HH:mm')
        : '';
      
      // 获取状态名称
      const oldStatus = comparison.oldVersion.VERSION_STATUS || comparison.oldVersion.status || 1;
      const newStatus = comparison.newVersion.VERSION_STATUS || comparison.newVersion.status || 1;
      
      // 格式化文件大小
      const oldSize = this._formatFileSize(comparison.oldVersion.FILE_SIZE || comparison.oldVersion.size || 0);
      const newSize = this._formatFileSize(comparison.newVersion.FILE_SIZE || comparison.newVersion.size || 0);
      
      // 处理差异数据
      let bomDiffs = [];
      let textDiffs = [];
      
      // 如果有BOM差异数据
      if (comparison.diffs && comparison.diffs.bom) {
        bomDiffs = this._processBomDiffs(comparison.diffs.bom);
      }
      
      // 如果有文本差异数据
      if (comparison.diffs && comparison.diffs.text) {
        textDiffs = this._processTextDiffs(comparison.diffs.text);
      }
      
      this.setData({
        oldCreateTime,
        newCreateTime,
        oldStatusName: STATUS_NAMES[oldStatus] || '未知',
        newStatusName: STATUS_NAMES[newStatus] || '未知',
        oldSize,
        newSize,
        bomDiffs,
        textDiffs
      });
    },
    
    /**
     * 根据资源类型确定内容比较类型
     */
    _determineContentType(resourceType) {
      let contentType = 'generic';
      
      // BOM
      if (resourceType === 1) {
        contentType = 'bom';
      } 
      // 文本类型（如软件代码）
      else if (resourceType === 5) {
        contentType = 'text';
      }
      // 图像或其他二进制类型
      else if ([0, 2].includes(resourceType)) {
        contentType = 'generic';
      }
      
      this.setData({ contentType });
    },
    
    /**
     * 处理BOM差异数据
     */
    _processBomDiffs(bomDiffs) {
      if (!bomDiffs || !Array.isArray(bomDiffs)) return [];
      
      return bomDiffs.map((item, index) => ({
        id: index,
        name: item.name || item.materialName || '',
        oldQuantity: item.oldQuantity || 0,
        newQuantity: item.newQuantity || 0,
        change: item.change || 'unchanged'
      }));
    },
    
    /**
     * 处理文本差异数据
     */
    _processTextDiffs(textDiffs) {
      if (!textDiffs || !Array.isArray(textDiffs)) return [];
      
      return textDiffs.map((item, index) => ({
        lineNumber: item.lineNumber || index + 1,
        content: item.content || '',
        type: item.type || 'context'
      }));
    },
    
    /**
     * 格式化文件大小
     */
    _formatFileSize(size) {
      if (size < 1024) {
        return size + ' B';
      } else if (size < 1024 * 1024) {
        return (size / 1024).toFixed(2) + ' KB';
      } else {
        return (size / (1024 * 1024)).toFixed(2) + ' MB';
      }
    },
    
    /**
     * 下载旧版本
     */
    onDownloadOld() {
      const { comparison } = this.data;
      if (!comparison || !comparison.oldVersion) return;
      
      const fileUrl = comparison.oldVersion.FILE_URL || comparison.oldVersion.fileUrl;
      
      if (fileUrl) {
        this.triggerEvent('download', { 
          url: fileUrl, 
          version: comparison.oldVersion.VERSION || comparison.oldVersion.version,
          isOld: true
        });
        
        // 下载文件
        wx.showLoading({ title: '正在下载...' });
        wx.downloadFile({
          url: fileUrl,
          success: (res) => {
            wx.hideLoading();
            if (res.statusCode === 200) {
              wx.openDocument({
                filePath: res.tempFilePath,
                showMenu: true,
                success: function() {
                  console.log('打开文档成功');
                },
                fail: function(error) {
                  console.error('打开文档失败', error);
                  wx.showToast({ title: '打开文档失败', icon: 'none' });
                }
              });
            } else {
              wx.showToast({ title: '下载失败', icon: 'none' });
            }
          },
          fail: () => {
            wx.hideLoading();
            wx.showToast({ title: '下载失败', icon: 'none' });
          }
        });
      } else {
        wx.showToast({ title: '文件链接不存在', icon: 'none' });
      }
    },
    
    /**
     * 下载新版本
     */
    onDownloadNew() {
      const { comparison } = this.data;
      if (!comparison || !comparison.newVersion) return;
      
      const fileUrl = comparison.newVersion.FILE_URL || comparison.newVersion.fileUrl;
      
      if (fileUrl) {
        this.triggerEvent('download', { 
          url: fileUrl, 
          version: comparison.newVersion.VERSION || comparison.newVersion.version,
          isOld: false
        });
        
        // 下载文件
        wx.showLoading({ title: '正在下载...' });
        wx.downloadFile({
          url: fileUrl,
          success: (res) => {
            wx.hideLoading();
            if (res.statusCode === 200) {
              wx.openDocument({
                filePath: res.tempFilePath,
                showMenu: true,
                success: function() {
                  console.log('打开文档成功');
                },
                fail: function(error) {
                  console.error('打开文档失败', error);
                  wx.showToast({ title: '打开文档失败', icon: 'none' });
                }
              });
            } else {
              wx.showToast({ title: '下载失败', icon: 'none' });
            }
          },
          fail: () => {
            wx.hideLoading();
            wx.showToast({ title: '下载失败', icon: 'none' });
          }
        });
      } else {
        wx.showToast({ title: '文件链接不存在', icon: 'none' });
      }
    }
  }
}); 